package com.tcc.fastline;


import java.util.Hashtable;

import com.tcc.fastline.Domain.Estabelecimento;
import com.tcc.fastline.Domain.Usuario;
import com.tcc.fastline.Domain.UsuarioSistema;

import android.R.string;
import android.content.Context;
import android.content.Intent;

public class SessionManager {

	static Context _context;
	
	static Hashtable<String, Object> dicionarioDados = new Hashtable<String, Object>();
	
	static CurrentUserRepository<?> repository;

	public SessionManager(Context context) {
		_context = context;
	}

	public static Context getContext(){
		return _context;
	}
	
	public static void setContext(Context contexto){
		_context = contexto;
	}
	
	public void createLoginSession(Usuario userSistema) 
	{
		repository = new CurrentUserRepository<Usuario>();
		repository.setCurrentUser(userSistema);
	}
	
	public void createLoginSession(Estabelecimento estabelecimento) 
	{
		repository = new CurrentUserRepository<Estabelecimento>();
		repository.setCurrentUser(estabelecimento);
	}

	public void checkLogin() {

		if (!this.isLoggedIn()) {
			iniciarMainActivity();
		}
	}

	public static void logoutUser() {
		repository = null;
		iniciarMainActivity();
	}

	private static void iniciarMainActivity() {
		Intent i = new Intent(_context, LoginActivity.class);
		i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		_context.startActivity(i);
	}

	public boolean isLoggedIn() {
		return repository != null;
	}

	public String getTipoUsuario() {
		return ((UsuarioSistema) repository.getCurrentUser()).getTipoUsuario().toString();
	}

	public String getEmailUsuario() {
		return ((UsuarioSistema) repository.getCurrentUser()).getEmail().toString();
	}

	public String getNomeUsuario() {
		return ((UsuarioSistema) repository.getCurrentUser()).getNome().toString();
	}
	
	public Object getCurrentObjectRepository(){
		return this.repository.getCurrentUser();
	}

	public Object getkeySession(String chave){
		if(this.dicionarioDados.containsKey(chave)){
			return this.dicionarioDados.get(chave);
		}else{
			return null;
		}
	}
	
	public void setKeySession(String chave, Object Valor){
		if(this.dicionarioDados.containsKey(chave)){
			this.dicionarioDados.remove(chave);
		}
		this.dicionarioDados.put(chave, Valor);
	}
	
	public void removeKeySession(String chave){
		this.dicionarioDados.remove(chave);
	}
}